package com.example.Utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 获取日期的工具类
 */
public class GetDataUtils {
    /**
     * 获取当前周的所有日期
     * @param n -1代表上一周 +1代表下一周
     * @param myDate 当前日期
     */
    public static List<Date> getweek(int n, Date myDate) {
        List<Date> dateList = new ArrayList<>();

        try {
            Calendar calendar = Calendar.getInstance();
            calendar.setFirstDayOfWeek(Calendar.MONDAY);

            Calendar cal = Calendar.getInstance();
            cal.setTime(myDate);

            // 判断要计算的日期是否是周日，如果是则减一天计算周六的，否则会计算到下一周
            int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
            if (1 == dayWeek) {
                cal.add(Calendar.DAY_OF_MONTH, -1);
            }

            cal.setFirstDayOfWeek(Calendar.MONDAY);
            int day = cal.get(Calendar.DAY_OF_WEEK);
            cal.add(Calendar.DATE, (cal.getFirstDayOfWeek() - day + 7 * n));

            // 设置时间为00:00:00
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            dateList.add(cal.getTime());

            for (int i = 1; i < 7; i++) {
                cal.add(Calendar.DATE, 1);
                dateList.add(cal.getTime());
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

        return dateList;
    }

    /**
     * 格式化时间
     * @param datetime 传入的时间
     * @param type 转换成什么类型，（默认为yyyy年MM月dd日 HH:mm:ss）
     * @return String
     */
    public String FormatDateTime(Date datetime,String type){
        DateFormat df = null;
        if (StringUtils.isBlank(type))
            df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        else
            df = new SimpleDateFormat(type);
        return df.format(datetime);
    }
}
